package com.wms.dao;

import com.wms.model.PageBean;
import org.hibernate.criterion.DetachedCriteria;

import java.io.Serializable;
import java.util.List;

public interface BaseDao<T> {

    /**
     * 保存
     *
     * @param model 实体
     */
    public abstract void save(T model);

    /**
     * 删除
     *
     * @param model 实体
     */
    public abstract void delete(T model);

    /**
     * 更新
     *
     * @param model 实体
     */
    public abstract void update(T model);

    /**
     * 查
     *
     * @param id id
     * @return T 实体
     */
    public abstract T find(Serializable id);

    /**
     * 查
     *
     * @return 列表
     */
    public abstract List<T> findAll();

    /**
     * 公共的更新方法
     *
     * @param hql  hql语句
     * @param objs 参数
     */
    public abstract int executeUpdate(String hql, Object... objs);

    /**
     * 公共的更新方法
     *
     * @param queryName 在映射文件中配置的query名字
     * @param objs      参数
     */
    public abstract int executeUpdateByQueryName(String queryName, Object... objs);


    /**
     * 根据离线查询条件查询
     *
     * @param dc 离线查询对象
     * @return List<T>
     */
    public abstract List<T> findByCondition(DetachedCriteria dc);

    /**
     * 插入所有
     * @param tList 集合
     */
    public abstract void insertAll(List<T> tList);

    /**
     * 分页查询
     * @param pb 分页条件
     */
    public abstract void pageQuery(PageBean<T> pb) throws IllegalAccessException, InstantiationException;


    /**
     *
     * @param t
     * @param condition
     * @return
     */
    public abstract Long count(T t,String condition);

    /**
     * 删除所有
     * @param condition 条件
     */
    public abstract void deleteAll(String condition);

    public abstract List<T> findByCondition(String condition,Object... param);
}
